#include <iostream>
#include <cstdlib>
#include <string.h>

using namespace std;

const int DLUGOSCC = 20;

class Pojazd {
protected:
	static const int DLUGOSC = DLUGOSCC;
	char nazwaProducenta[DLUGOSC];
	int waga;
public:
	Pojazd(char nazwa[DLUGOSC], int wag);
	~Pojazd();
	virtual void wypisz();
};

class Data {
private:
	int dzien;
	int rok;
	char miesiac[DLUGOSCC];
public:
	Data(int d = 01, int r = 2015, char m[DLUGOSCC] = "styczen");
	~Data();
	void wypisz();
	Data & operator=(const Data &that);

};

class Samochod :public Pojazd{
	Data *przegladyTechniczne;
	int liczbaPasazerow;
	int iloscPrzegladow;
public:
	Samochod(Data *przegladyTechniczne, int lpas, int ilprz, char nazpr[DLUGOSC], int wag);
	Samochod(Samochod &that);
	Samochod & operator=(const Samochod &that);
	~Samochod();
	void dodajDate(Data *obiekt);
	void wypisz();


};

class Ciezarowka :public Pojazd{
	char nrViaTool[DLUGOSC];
public:
	Ciezarowka(char nr[DLUGOSC], char nazpr[DLUGOSC], int wag);
	~Ciezarowka();
	void wypisz();
};

class Motor :public Pojazd{
	char producent[DLUGOSC];
public:
	Motor(char prod[DLUGOSC], char nazpr[DLUGOSC], int wag);
	~Motor();
	void wypisz();

};


class Kontener {
	Pojazd* tablicaPojazdow[DLUGOSCC];
	int iloscDodanych = 0;
	int aktualnieZwracany = 0;
public:
	void dodaj(Pojazd*);
	Pojazd* pobierzPierwszy();
	Pojazd* pobierzNastepny();
	bool czyPierwszy();
	void usunBiezacy();

};
